Reactã®useTransitionããã¯ã䜿ããããŒãã£ã³ã°ç¶æ ã®ç®¡çãšUIã¢ããããŒãã®åªå é äœä»ããè¡ããäžçäžã®ãŠãŒã¶ãŒã«ã¹ã ãŒãºã§ã¬ã¹ãã³ã·ããªã¢ããªã±ãŒã·ã§ã³ãæäŸããŸãã
React useTransitionããã¯ïŒã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäž
ãŠã§ãéçºã®çµ¶ãéãªãé²åã®äžã§ãã·ãŒã ã¬ã¹ã§ã¬ã¹ãã³ã·ããªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åµåºã¯æéèŠèª²é¡ã§ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹æ§ç¯ã®ããã®äž»èŠãªJavaScriptã©ã€ãã©ãªã§ããReactã¯ãéçºè
ããã®ç®æšãéæããããã®æ©èœãåžžã«å°å
¥ããŠããŸãããã®äžã§ããuseTransition
ããã¯ã¯ãããŒãã£ã³ã°ç¶æ
ã管çããUIã¢ããããŒãã®åªå
é äœãä»ããããã®åŒ·åãªããŒã«ãšããŠéç«ã£ãŠãããæçµçã«ã¯ãäžçäžã®ãŠãŒã¶ãŒã«ãšã£ãŠãããã¹ã ãŒãºã§å¿«é©ãªã€ã³ã¿ã©ã¯ã·ã§ã³ãå®çŸããŸãã
åé¡ã®çè§£ïŒUIã¢ããããŒãã®ãããã¯
useTransition
ãæ·±ãçè§£ããåã«ãããã解決ããããšããŠããåé¡ãçè§£ããããšãäžå¯æ¬ ã§ããåŸæ¥ã®Reactã¬ã³ããªã³ã°ã§ã¯ãã¢ããããŒãã¯åæçã«è¡ãããŸããããã¯ãã³ã³ããŒãã³ãã®ç¶æ
ãå€åãããšãReactãçŽã¡ã«ã¬ã³ããªã³ã°ããã»ã¹ãéå§ããã¡ã€ã³ã¹ã¬ããããããã¯ããç¹ã«è€éãªã³ã³ããŒãã³ããèšç®éã®å€ãæäœãåŠçããéã«ãç®ç«ã£ãé
å»¶ã«ã€ãªããå¯èœæ§ãããããšãæå³ããŸãããŠãŒã¶ãŒã¯ä»¥äžã®ãããªåé¡ãçµéšããå¯èœæ§ããããŸãã
- UIã®ããªãŒãºïŒã€ã³ã¿ãŒãã§ãŒã¹ãå¿çããªããªãããŠãŒã¶ãŒã¯æäœã§ããªããªããŸãã
- ããã¡ãªãã¢ãã¡ãŒã·ã§ã³ïŒã¢ãã¡ãŒã·ã§ã³ãéåãéåãã§ãäžåçã«è¡šç€ºãããŸãã
- é å»¶ãããã£ãŒãããã¯ïŒå ¥åãã£ãŒã«ããžã®å ¥åã®ãããªã¢ã¯ã·ã§ã³ãé ãæããããŸãã
ãããã®åé¡ã¯ãã€ã³ã¿ãŒãããæ¥ç¶ãé ããŠãŒã¶ãŒããããã»ã©åŒ·åã§ãªãããã€ã¹ã䜿çšããŠãããŠãŒã¶ãŒã«ãšã£ãŠç¹ã«åé¡ãšãªããå šäœçãªãšã¯ã¹ããªãšã³ã¹ã«æªåœ±é¿ãåãŒããŸãã垯åå¹ ãéãããå°åã«ãããŠãŒã¶ãŒããããŒã¿éã®å€ãã¢ããªã±ãŒã·ã§ã³ã䜿çšããããšãããšãåæçãªã¢ããããŒãã«ãã£ãŠåŒãèµ·ããããé å»¶ã¯éåžžã«èç«ããããã®ã«ãªãå¯èœæ§ããããŸãã
useTransition
ã®ç޹ä»ïŒã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã®è§£æ±ºç
React 18ã§å°å
¥ãããuseTransition
ããã¯ã¯ãã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ãå¯èœã«ããããšã§ããããã®åé¡ã«å¯Ÿãã解決çãæäŸããŸããã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã䜿çšãããšãReactã¯ã¬ã³ããªã³ã°ã¿ã¹ã¯ãäžæãäžæåæ¢ãåéããŸãã¯æŸæ£ããããšããå¯èœã«ãªããç¹å®ã®ã¢ããããŒããä»ã®ã¢ããããŒããããåªå
ãããããšãã§ããŸããããã¯ãReactããããã¯ã°ã©ãŠã³ãã§é·æéå®è¡ãããæäœãå®è¡ããŠããéã§ããUIã®å¿çæ§ãç¶æã§ããããšãæå³ããŸãã
useTransition
ã®ä»çµã¿
useTransition
ããã¯ã¯ã2ã€ã®å€ãå«ãé
åãè¿ããŸãã
isPending
ïŒãã©ã³ãžã·ã§ã³ãã¢ã¯ãã£ããã©ããã瀺ãããŒã«å€ãstartTransition
ïŒãã©ã³ãžã·ã§ã³ãšããŠããŒã¯ããã¹ããŒãã¢ããããŒããã©ãããã颿°ã
startTransition
ãåŒã³åºããšãReactã¯ãå²ãŸããã¹ããŒãã¢ããããŒããç·æ¥æ§ã®äœããã®ãšããŠããŒã¯ããŸããããã«ãããReactã¯ã¡ã€ã³ã¹ã¬ãããããã»ã©å¿ãããªããªããŸã§ã¢ããããŒããé
ãããããšãã§ãããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãªã©ãããç·æ¥æ§ã®é«ãã¢ããããŒããåªå
çã«åŠçã§ããŸãããã©ã³ãžã·ã§ã³ãä¿çäžã®éãisPending
ã¯true
ã«ãªããããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒããã®ä»ã®èŠèŠçãªãã£ãŒãããã¯ããŠãŒã¶ãŒã«è¡šç€ºã§ããŸãã
å®è·µçãªäŸïŒuseTransition
ã«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäž
Reactã¢ããªã±ãŒã·ã§ã³ã§useTransition
ã䜿çšããŠããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããæ¹æ³ã®å®è·µçãªäŸãããã€ãèŠãŠã¿ãŸãããã
äŸ1ïŒæ€çŽ¢æ©èœã®æé©å
ãŠãŒã¶ãŒãå
¥åããéã«ã倧ããªããŒã¿ã»ããããã£ã«ã¿ãªã³ã°ããæ€çŽ¢æ©èœãæ€èšããŠãã ãããuseTransition
ã䜿çšããªããšãããŒã¹ãããŒã¯ããšã«åã¬ã³ããªã³ã°ãããªã¬ãŒãããé
å»¶ãçºçããå¯èœæ§ããããŸããuseTransition
ã䜿çšãããšããã£ã«ã¿ãªã³ã°æäœãé
ãããªãããå
¥åãã£ãŒã«ãã®æŽæ°ãåªå
ããããšãã§ããŸãã
import React, { useState, useTransition } from 'react';
function SearchComponent({
data //assume this is a large data set
}) {
const [query, setQuery] = useState('');
const [results, setResults] = useState(data); //initial data set as result
const [isPending, startTransition] = useTransition();
const handleChange = (e) => {
const inputValue = e.target.value;
setQuery(inputValue); // Update the input field immediately
startTransition(() => {
// Filter the data in a transition
const filteredResults = data.filter((item) =>
item.name.toLowerCase().includes(inputValue.toLowerCase())
);
setResults(filteredResults);
});
};
return (
<div>
<input type="text" value={query} onChange={handleChange} placeholder="Search..." />
{isPending && <p>Searching...</p>}
<ul>
{results.map((item) => (
<li key={item.id}>{item.name}</li>
))}
</ul>
</div>
);
}
export default SearchComponent;
ãã®äŸã§ã¯ãhandleChange
颿°ã¯query
ç¶æ
ãçŽã¡ã«æŽæ°ããå
¥åãã£ãŒã«ããå¿çæ§ãç¶æããããã«ããŸããèšç®è² è·ã®é«ãå¯èœæ§ããããã£ã«ã¿ãªã³ã°æäœã¯ãstartTransition
ã§ã©ãããããŸãããã£ã«ã¿ãªã³ã°ãé²è¡äžã®éãisPending
ç¶æ
ã¯true
ã§ããããæ€çŽ¢äž...ãã¡ãã»ãŒãžããŠãŒã¶ãŒã«è¡šç€ºã§ããŸããããã«ãããèŠèŠçãªãã£ãŒãããã¯ãæäŸããããŠãŒã¶ãŒãé
å»¶ãå¿çæ§ã®æ¬ åŠãšããŠèªèããããšãé²ããŸãã
äŸ2ïŒããã²ãŒã·ã§ã³ãã©ã³ãžã·ã§ã³ã®æé©å
ããã²ãŒã·ã§ã³ãã©ã³ãžã·ã§ã³ããuseTransition
ã®æ©æµãåããããšãã§ããŸããã«ãŒãéãç§»åããå Žåãç¹ã«è€éãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã³ã³ããŒãã³ããããŠã³ããããããŒã¿ããã§ãããããéã«é
å»¶ãçºçããå¯èœæ§ããããŸããuseTransition
ã䜿çšãããšãæ°ããããŒãžã³ã³ãã³ãã®ã¬ã³ããªã³ã°ãé
ãããªãããURLã®æŽæ°ãåªå
ããããšãã§ããŸãã
import React, { useState, useTransition } from 'react';
import { useNavigate } from 'react-router-dom';
function NavigationComponent() {
const navigate = useNavigate();
const [isPending, startTransition] = useTransition();
const handleNavigation = (route) => {
startTransition(() => {
navigate(route);
});
};
return (
<nav>
<button onClick={() => handleNavigation('/home')}>Home</button>
<button onClick={() => handleNavigation('/about')}>About</button>
<button onClick={() => handleNavigation('/products')}>Products</button>
{isPending && <p>Loading...</p>}
</nav>
);
}
export default NavigationComponent;
ãã®äŸã§ã¯ãhandleNavigation
颿°ã¯startTransition
ã䜿çšããŠnavigate
颿°ãã©ããããŠããŸããããã«ãããReactã¯URLã®æŽæ°ãåªå
ããããã²ãŒã·ã§ã³ãéå§ãããããšããŠãŒã¶ãŒã«å³åº§ã«ãã£ãŒãããã¯ããŸããæ°ããããŒãžã³ã³ãã³ãã®ã¬ã³ããªã³ã°ã¯ãã¡ã€ã³ã¹ã¬ãããããã»ã©å¿ãããªããªããŸã§é
å»¶ãããããã¹ã ãŒãºãªãã©ã³ãžã·ã§ã³ãšã¯ã¹ããªãšã³ã¹ãä¿èšŒãããŸãããã©ã³ãžã·ã§ã³ãä¿çäžã®éããLoading...ãã¡ãã»ãŒãžããŠãŒã¶ãŒã«è¡šç€ºã§ããŸãã
äŸ3ïŒLoad Moreæ©èœä»ãã®ç»åã®ã£ã©ãªãŒ
ãLoad Moreããã¿ã³ã䜿çšããŠç»åããããã§ããŒãããç»åã®ã£ã©ãªãŒãæ€èšããŠãã ãããæ°ããç»åã®ããããããŒãããéãuseTransition
ã䜿çšããŠãç»åããã§ããããã³ã¬ã³ããªã³ã°ãããŠããéãUIã®å¿çæ§ãç¶æã§ããŸãã
import React, { useState, useTransition, useCallback } from 'react';
function ImageGallery() {
const [images, setImages] = useState([]);
const [isLoading, setIsLoading] = useState(false);
const [isPending, startTransition] = useTransition();
const [page, setPage] = useState(1);
const loadMoreImages = useCallback(async () => {
setIsLoading(true);
startTransition(async () => {
// Simulate fetching images from an API (replace with your actual API call)
await new Promise(resolve => setTimeout(resolve, 500));
const newImages = Array.from({ length: 10 }, (_, i) => ({
id: images.length + i + 1,
src: `https://via.placeholder.com/150/${Math.floor(Math.random() * 16777215).toString(16)}` // Random placeholder image
}));
setImages(prevImages => [...prevImages, ...newImages]);
setPage(prevPage => prevPage + 1);
});
setIsLoading(false);
}, [images.length]);
return (
<div>
<div style={{ display: 'flex', flexWrap: 'wrap' }}>
{images.map(image => (
<img key={image.id} src={image.src} alt={`Image ${image.id}`} style={{ margin: '5px' }} />
))}
</div>
{isLoading ? (
<p>Loading more images...</p>
) : (
<button onClick={loadMoreImages} disabled={isPending}>
{isPending ? 'Loading...' : 'Load More'}
</button>
)}
</div>
);
}
export default ImageGallery;
ãã®äŸã§ã¯ããLoad Moreããã¿ã³ãã¯ãªãã¯ãããšãloadMoreImages
颿°ãããªã¬ãŒãããŸãããã®é¢æ°å
ã§ã¯ãstartTransition
ã䜿çšããŠãæ°ããç»åãã®ã£ã©ãªãŒã«è¿œå ããã¹ããŒãã¢ããããŒããã©ããããŸããç»åãããŒãããã³ã¬ã³ããªã³ã°ãããŠããéãisPending
ã¯trueã«èšå®ããããã¿ã³ã¯ç¡å¹ã«ãªããè€æ°åã®ã¯ãªãã¯ãé²ããããã¹ãã¯ãLoading...ãã«å€ãããŸããããŒãã£ã³ã°ãçµäºãããšãç»åãã¬ã³ããªã³ã°ãããisPending
ã¯falseã«æ»ããŸããããã«ãããããã«å€ãã®ç»åãããŒããããŠããããšãèŠèŠçã«ç€ºãããŠãŒã¶ãŒããã¿ã³ãããã«ã¯ãªãã¯ããŠäºæããªãåäœãåŒãèµ·ããããšãé²ããŸãã
useTransition
ã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
useTransition
ããã¯ã广çã«æŽ»çšããã«ã¯ã次ã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããã
- ç·æ¥æ§ã®ãªãã¢ããããŒããç¹å®ããïŒã¢ããªã±ãŒã·ã§ã³ãæ³šææ·±ãåæããŠãçŽã¡ã«ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«éèŠã§ãªãã¹ããŒãã¢ããããŒããç¹å®ããŸãããããã¯ã
startTransition
ã§ã©ããããäž»èŠãªåè£ã§ãã - èŠèŠçãªãã£ãŒãããã¯ãæäŸããïŒãã©ã³ãžã·ã§ã³ãä¿çäžã®å Žåã¯ãåžžã«ãŠãŒã¶ãŒã«èŠèŠçãªãã£ãŒãããã¯ãæäŸããŸããããã¯ãããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒãããã°ã¬ã¹ããŒããŸãã¯ãLoading...ãã®ãããªã·ã³ãã«ãªã¡ãã»ãŒãžã§ããå¯èœæ§ããããŸãã
useTransition
ãé床ã«äœ¿çšããªãïŒuseTransition
ã¯åŒ·åãªããŒã«ã§ãããé床ã«äœ¿çšããããšã¯é¿ããŠãã ãããããã©ãŒãã³ã¹ã®åé¡ãåŒãèµ·ããããšãããã£ãŠããã¢ããããŒãããŸãã¯çŽã¡ã«ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã«éèŠã§ãªãã¢ããããŒãã«ã®ã¿é©çšããŠãã ããã- ããã©ãŒãã³ã¹ã枬å®ããïŒããã©ãŒãã³ã¹ç£èŠããŒã«ã䜿çšããŠã
useTransition
ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«äžãã圱é¿ã枬å®ããŸããããã«ãããå®éã«ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŠããããšã確èªã§ããŸããReact DevToolsã¯ãåªãããããã¡ã€ãªã³ã°æ©èœãæäŸããŸãã - ãããã¯ãŒã¯ã®ç¶æ ãèæ ®ããïŒã¿ãŒã²ãããªãŒãã£ãšã³ã¹ã®å¹³åãããã¯ãŒã¯ã¬ã€ãã³ã·ã«åãããŠããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã調æŽããŸããã€ã³ã¿ãŒãããæ¥ç¶ãé ãå°åã«ãããŠãŒã¶ãŒã¯ãããé·ããŸãã¯ããå€ãã®æ å ±ãå«ãããŒãã£ã³ã°ã¢ãã¡ãŒã·ã§ã³ããæ©æµãåããå¯èœæ§ããããŸãã
ã°ããŒãã«ãªèæ ®äºé ïŒå€æ§ãªãªãŒãã£ãšã³ã¹ã«åãããUX
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåã¯ãããŸããŸãªå°åãæåã®ãŠãŒã¶ãŒã®å€æ§ãªããŒãºãšæåŸ
ãèæ
®ããããšãéèŠã§ãã以äžã¯ãuseTransition
ã®äœ¿çšãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®æé©åã«é¢ããã°ããŒãã«ãªèæ
®äºé
ã§ãã
- ãããã¯ãŒã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ïŒãããã¯ãŒã¯é床ãšä¿¡é Œæ§ã¯ãäžçäžã§å€§ããç°ãªããŸããäžéšã®å°åã®ãŠãŒã¶ãŒã¯ãä»ã®å°åãããé ãã€ã³ã¿ãŒãããæ¥ç¶ãçµéšããå¯èœæ§ããããŸããã¢ããªã±ãŒã·ã§ã³ãæé©åããŠãããŒã¿è»¢éãæå°éã«æããæé©ãªãããã¯ãŒã¯ç¶æ ã§ãå¿çæ§ãç¶æããããã«ããŠãã ããã
- ããã€ã¹ã®æ©èœïŒããã€ã¹ã®æ©èœãäžçäžã§å€§ããç°ãªããŸããäžéšã®å°åã®ãŠãŒã¶ãŒã¯ãå€ãããã€ã¹ãããã»ã©åŒ·åã§ãªãããã€ã¹ã䜿çšããŠããå¯èœæ§ããããŸããã¢ããªã±ãŒã·ã§ã³ãæé©åããŠãCPUãšã¡ã¢ãªã®äœ¿çšéãæå°éã«æããããŸããŸãªããã€ã¹ã§é©åã«åäœããããã«ããŠãã ããã
- èšèªãšããŒã«ãªãŒãŒã·ã§ã³ïŒã¢ããªã±ãŒã·ã§ã³ãããŸããŸãªèšèªãšå°ååãã«é©åã«ããŒã«ã©ã€ãºãããŠããããšã確èªããŠãã ãããããã«ã¯ãããã¹ãã®ç¿»èš³ãæ¥ä»ãšæ°åã®ãã©ãŒããããããã³ããŸããŸãªæåçæ £ç¿ãžã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®é©å¿ãå«ãŸããŸããåœéåïŒi18nïŒã©ã€ãã©ãªãšæè¡ã䜿çšããŠãçã«ã°ããŒãã«ãªã¢ããªã±ãŒã·ã§ã³ãäœæããŸããå³ããå·ŠïŒRTLïŒèšèªãUIã¬ã€ã¢ãŠãã«äžãã圱é¿ãèæ ®ããŠãã ããã
- ã¢ã¯ã»ã·ããªãã£ïŒã¢ããªã±ãŒã·ã§ã³ãé害ã®ãããŠãŒã¶ãŒãå©çšã§ããããã«ããŠãã ãããããã«ã¯ãç»åã®ä»£æ¿ããã¹ãã®æäŸãé©åãªã»ãã³ãã£ãã¯HTMLã®äœ¿çšãããã³ã¢ããªã±ãŒã·ã§ã³ãããŒããŒãã§ããã²ãŒãå¯èœã§ããããšãå«ãŸããŸãã
- ããŒã¿ã®ãã©ã€ãã·ãŒïŒããŸããŸãªåœãå°åã®ããŒã¿ã®ãã©ã€ãã·ãŒæ³ããã³èŠå¶ãå°éããŠãã ããããŠãŒã¶ãŒããŒã¿ã®åéãšäœ¿ç𿹿³ã«ã€ããŠã¯éææ§ãä¿ã¡ããŠãŒã¶ãŒã«èªåã®ããŒã¿ã®å¶åŸ¡æš©ãäžããŠãã ãããGDPRïŒãšãŒãããïŒãCCPAïŒã«ãªãã©ã«ãã¢ïŒãªã©ãããŸããŸãªåœã«ç¹æã®èŠå¶ãžã®æºæ ã確ä¿ããŠãã ããã
- ã¿ã€ã ãŸãŒã³ãšé貚ïŒã¿ã€ã ãŸãŒã³ãšé貚ã®å€æãé©åã«åŠçããŸããããŸããŸãªã¿ã€ã ãŸãŒã³ãšé貚圢åŒããµããŒãããã©ã€ãã©ãªã䜿çšããŸããæ¥ä»ãšæå»ããŠãŒã¶ãŒã®ããŒã«ã«ã¿ã€ã ãŸãŒã³ã§è¡šç€ºããäŸ¡æ ŒããŠãŒã¶ãŒã®ããŒã«ã«é貚ã§è¡šç€ºããŸãã
- æåçãªæåæ§ïŒæåçãªéãã«æ³šæããç¹å®ã®æåã§æ»æçãŸãã¯äžé©åãªå¯èœæ§ã®ããç»åãèšèªããŸãã¯ãã¶ã€ã³èŠçŽ ã®äœ¿çšãé¿ããŠãã ãããæ°ããå°åã«ã¢ããªã±ãŒã·ã§ã³ããããã€ããåã«ãæåçèŠç¯ãšå¥œã¿ã調æ»ããŠãã ããã
useTransition
ãè¶
ããŠïŒãããªãæé©å
useTransition
ã¯è²ŽéãªããŒã«ã§ãããããºã«ã®1ã€ã®ããŒã¹ã«ãããŸããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãçã«æé©åããã«ã¯ã次ã®è¿œå ã®æŠç¥ãæ€èšããŠãã ããã
- ã³ãŒãåå²ïŒã¢ããªã±ãŒã·ã§ã³ãããå°ããªãã£ã³ã¯ã«åå²ããå¿ èŠã«å¿ããŠããŒãããŸããããã«ãããåæã®ããŒãæéãççž®ãããã¢ããªã±ãŒã·ã§ã³å šäœã®å¿çæ§ãåäžããŸãã
- ç»åã®æé©åïŒå質ãæãªãããšãªããç»åã®ãã¡ã€ã«ãµã€ãºãå°ããããããã«ç»åãæé©åããŸããImageOptimãTinyPNGãªã©ã®ããŒã«ã䜿çšããŸãããŠãŒã¶ãŒã®ç»é¢ãµã€ãºãšè§£å床ã«åºã¥ããŠãããŸããŸãªç»åãµã€ãºãæäŸããã¬ã¹ãã³ã·ãç»åã®äœ¿çšãæ€èšããŠãã ããã
- ãã£ãã·ã¥ïŒé »ç¹ã«ã¢ã¯ã»ã¹ãããããŒã¿ãä¿åãããµãŒããŒããç¹°ãè¿ããã§ããããå¿ èŠããªããããã«ããã£ãã·ã³ã°æŠç¥ãå®è£ ããŸãããã©ãŠã¶ãã£ãã·ã¥ããµãŒããŒãµã€ããã£ãã·ã¥ãããã³ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ïŒCDNïŒã䜿çšããŠãããã©ãŒãã³ã¹ãåäžãããŸãã
- ãããŠã³ã¹ãšã¹ããããªã³ã°ïŒãããŠã³ã¹ãšã¹ããããªã³ã°æè¡ã䜿çšããŠã颿°ã®å®è¡é床ãå¶éããŸããããã¯ãã¹ã¯ããŒã«ããªãµã€ãºãã¿ã€ãã³ã°ãªã©ã®ã€ãã³ããåŠçããå Žåã«åœ¹ç«ã¡ãŸãããããŠã³ã¹ã¯ãäžå®æééã¢ã¯ãã£ãã«ãªã£ãåŸã«ã®ã¿é¢æ°ãå®è¡ãããããã«ããã¹ããããªã³ã°ã¯ã颿°ãäžå®ã®ã¬ãŒãã§ããå®è¡ãããªãããã«ããŸãã
- ä»®æ³åïŒä»®æ³åæè¡ã䜿çšããŠã倧éã®ããŒã¿ãå¹ççã«ã¬ã³ããªã³ã°ããŸããããã«ããããªã¹ãã«æ°åãŸãã¯æ°çŸäžã®ã¢ã€ãã ã衚瀺ããå Žåã«ãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããReact Virtualizedãreact-windowãªã©ã®ã©ã€ãã©ãªã¯ãä»®æ³åã®å®è£ ã«åœ¹ç«ã¡ãŸãã
- Web WorkerïŒèšç®è² è·ã®é«ãã¿ã¹ã¯ãWeb Workerã«ç§»åããŠãã¡ã€ã³ã¹ã¬ããã®ãããã¯ãåé¿ããŸããWeb Workerã䜿çšãããšãããã¯ã°ã©ãŠã³ãã§JavaScriptã³ãŒããå®è¡ã§ãããããUIã®æŽæ°ãšãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãåŠçããããã«ã¡ã€ã³ã¹ã¬ãããè§£æŸã§ããŸãã
çµè«ïŒããè¯ãæªæ¥ã®ããã®ã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã®æ¡çš
useTransition
ããã¯ã¯ãReactéçºã«ããã倧ããªäžæ©ã衚ããŠãããéçºè
ãããå¿çæ§ãé«ãé
åçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœæã§ããããã«ããŸããã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã®ååãçè§£ãããã¹ããã©ã¯ãã£ã¹ãé©çšããããšã§ãuseTransition
ãæŽ»çšããŠã¢ããªã±ãŒã·ã§ã³ãæé©åããäžçäžã®ãŠãŒã¶ãŒã«ã·ãŒã ã¬ã¹ãªãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãããããã¯ãŒã¯ã®ç¶æ
ãããã€ã¹ã®æ©èœãæåçæåæ§ãªã©ã®ã°ããŒãã«ãªèŠçŽ ãèæ
®ããŠãçã«å
æ¬çã§ã¢ã¯ã»ã¹å¯èœãªãŠã§ãã¢ããªã±ãŒã·ã§ã³ãäœæããŠãã ããã
Reactãé²åãç¶ããã«ã€ããŠãuseTransition
ã®ãããªæ°æ©èœãç©æ¥µçã«æ¡çšããããšã¯ãäžæ©å
ãè¡ãã倿§ã§ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã®èŠæ±ãæºããåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«äžå¯æ¬ ã§ããããã©ãŒãã³ã¹ãã¢ã¯ã»ã·ããªãã£ãããã³æåçæåæ§ãåªå
ããããšã«ãããæ©èœçã§ããã ãã§ãªãã誰ãã䜿ãå¿å°ã®è¯ããŠã§ãã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã